// noinspection JSUnresolvedReference /** * Field Google Map */ /* global jQuery, document, redux_change, redux, google */ (function ( $ ) { 'use strict'; redux.field_objects = redux.field_objects || {}; redux.field_objects.google_maps = redux.field_objects.google_maps || {}; /* LIBRARY INIT */ redux.field_objects.google_maps.init = function ( selector ) { if ( ! selector ) { selector = $( document ).find( '.redux-group-tab:visible' ).find( '.redux-container-google_maps:visible' ); } $( selector ).each( function ( i ) { let delayRender; const el = $( this ); let parent = el; if ( ! el.hasClass( 'redux-field-container' ) ) { parent = el.parents( '.redux-field-container:first' ); } if ( parent.is( ':hidden' ) ) { return; } if ( parent.hasClass( 'redux-field-init' ) ) { parent.removeClass( 'redux-field-init' ); } else { return; } // Check for delay render, which is useful for calling a map // render after JavaScript load. delayRender = Boolean( el.find( '.redux_framework_google_maps' ).data( 'delay-render' ) ); // API Key button. redux.field_objects.google_maps.clickHandler( el ); // Init our maps. redux.field_objects.google_maps.initMap( el, i, delayRender ); } ); }; /* INIT MAP FUNCTION */ redux.field_objects.google_maps.initMap = async function ( el, idx, delayRender ) { let delayed; let scrollWheel; let streetView; let mapType; let address; let defLat; let defLong; let defaultZoom; let mapOptions; let geocoder; let g_autoComplete; let g_LatLng; let g_map; let noLatLng = false; // Pull the map class. const mapClass = el.find( '.redux_framework_google_maps' ); const containerID = mapClass.attr( 'id' ); const autocomplete = containerID + '_autocomplete'; const canvas = containerID + '_map_canvas'; const canvasId = $( '#' + canvas ); const latitude = containerID + '_latitude'; const longitude = containerID + '_longitude'; // Add map index to data attr. // Why, say we want to use delay_render, // and want to init the map later on. // You'd need the index number in the // event of multiple map instances. // This allows one to retrieve it // later. $( mapClass ).attr( 'data-idx', idx ); if ( true === delayRender ) { return; } // Map has been rendered, no need to process again. if ( $( '#' + containerID ).hasClass( 'rendered' ) ) { return; } // If a map is set to delay render and has been initiated // from another scrip, add the 'render' class so rendering // does not occur. // It messes things up. delayed = Boolean( mapClass.data( 'delay-render' ) ); if ( true === delayed ) { mapClass.addClass( 'rendered' ); } // Create the autocomplete object, restricting the search // to geographical location types. g_autoComplete = await google.maps.importLibrary( 'places' ); g_autoComplete = new google.maps.places.Autocomplete( document.getElementById( autocomplete ), {types: ['geocode']} ); // Data bindings. scrollWheel = Boolean( mapClass.data( 'scroll-wheel' ) ); streetView = Boolean( mapClass.data( 'street-view' ) ); mapType = Boolean( mapClass.data( 'map-type' ) ); address = mapClass.data( 'address' ); address = decodeURIComponent( address ); address = address.trim(); // Set default Lat/lng. defLat = canvasId.data( 'default-lat' ); defLong = canvasId.data( 'default-long' ); defaultZoom = canvasId.data( 'default-zoom' ); // Eval whether to set maps based on lat/lng or address. if ( '' !== address ) { if ( '' === defLat || '' === defLong ) { noLatLng = true; } } else { noLatLng = false; } // Can't have empty values, or the map API will complain. // Set default for the middle of the United States. defLat = defLat ? defLat : 39.11676722061108; defLong = defLong ? defLong : -100.47761000000003; if ( noLatLng ) { // If displaying a map based on an address. geocoder = new google.maps.Geocoder(); // Set up Geocode and pass address. geocoder.geocode( {'address': address}, function ( results, status ) { let latitude; let longitude; // Function results. if ( status === google.maps.GeocoderStatus.OK ) { // A good address was passed. g_LatLng = results[0].geometry.location; // Set map options. mapOptions = { center: g_LatLng, zoom: defaultZoom, streetViewControl: streetView, mapTypeControl: mapType, scrollwheel: scrollWheel, mapTypeControlOptions: { style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR, position: google.maps.ControlPosition.LEFT_BOTTOM }, mapId: 'REDUX_GOOGLE_MAPS', }; // Create map. g_map = new google.maps.Map( document.getElementById( canvas ), mapOptions ); // Get and set lat/long data. latitude = el.find( '#' + containerID + '_latitude' ); latitude.val( results[0].geometry.location.lat() ); longitude = el.find( '#' + containerID + '_longitude' ); longitude.val( results[0].geometry.location.lng() ); redux.field_objects.google_maps.renderControls( el, latitude, longitude, g_autoComplete, g_map, autocomplete, mapClass, g_LatLng, containerID ); } else { // No data found, alert the user. alert( 'Geocode was not successful for the following reason: ' + status ); } } ); } else { // If displaying map based on an lat/lng. g_LatLng = new google.maps.LatLng( defLat, defLong ); // Set map options. mapOptions = { center: g_LatLng, zoom: defaultZoom, // Start off far unless an item is selected, set by php. streetViewControl: streetView, mapTypeControl: mapType, scrollwheel: scrollWheel, mapTypeControlOptions: { style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR, position: google.maps.ControlPosition.LEFT_BOTTOM }, mapId: 'REDUX_GOOGLE_MAPS', }; // Create the map. g_map = new google.maps.Map( document.getElementById( canvas ), mapOptions ); redux.field_objects.google_maps.renderControls( el, latitude, longitude, g_autoComplete, g_map, autocomplete, mapClass, g_LatLng, containerID ); } }; redux.field_objects.google_maps.renderControls = function ( el, latitude, longitude, g_autoComplete, g_map, autocomplete, mapClass, g_LatLng, containerID ) { let markerTooltip; let infoWindow; let g_marker; let geoAlert = mapClass.data( 'geo-alert' ); // Get HTML. const input = document.getElementById( autocomplete ); // Set objects into the map. g_map.controls[google.maps.ControlPosition.TOP_LEFT].push( input ); // Bind objects to the map. g_autoComplete = new google.maps.places.Autocomplete( input ); g_autoComplete.bindTo( 'bounds', g_map ); // Get the marker tooltip data. markerTooltip = mapClass.data( 'marker-tooltip' ); markerTooltip = decodeURIComponent( markerTooltip ); // Create infoWindow. infoWindow = new google.maps.InfoWindow(); // Create marker. g_marker = new google.maps.Marker( { position: g_LatLng, map: g_map, anchorPoint: new google.maps.Point( 0, - 29 ), draggable: true, title: markerTooltip, animation: google.maps.Animation.DROP } ); geoAlert = decodeURIComponent( geoAlert ); // Place change. google.maps.event.addListener( g_autoComplete, 'place_changed', function () { let place; let address; let markerTooltip; infoWindow.close(); // Get place data. place = g_autoComplete.getPlace(); // Display alert if something went wrong. if ( ! place.geometry ) { window.alert( geoAlert ); return; } console.log( place.geometry.viewport ); // If the place has a geometry, then present it on a map. if ( place.geometry.viewport ) { g_map.fitBounds( place.geometry.viewport ); } else { g_map.setCenter( place.geometry.location ); g_map.setZoom( 17 ); // Why 17? Because it looks good. } markerTooltip = mapClass.data( 'marker-tooltip' ); markerTooltip = decodeURIComponent( markerTooltip ); // Set the marker icon. g_marker = new google.maps.Marker( { position: g_LatLng, map: g_map, anchorPoint: new google.maps.Point( 0, - 29 ), title: markerTooltip, clickable: true, draggable: true, animation: google.maps.Animation.DROP } ); // Set marker position and display. g_marker.setPosition( place.geometry.location ); g_marker.setVisible( true ); // Form array of address components. address = ''; if ( place.address_components ) { address = [( place.address_components[0] && place.address_components[0].short_name || '' ), ( place.address_components[1] && place.address_components[1].short_name || '' ), ( place.address_components[2] && place.address_components[2].short_name || '' )].join( ' ' ); } // Set the default marker info window with address data. infoWindow.setContent( '
' + place.name + '
' + address ); infoWindow.open( g_map, g_marker ); // Run Geolocation. redux.field_objects.google_maps.geoLocate( g_autoComplete ); // Fill in address inputs. redux.field_objects.google_maps.fillInAddress( el, latitude, longitude, g_autoComplete ); } ); // Marker drag. google.maps.event.addListener( g_marker, 'drag', function ( event ) { document.getElementById( latitude ).value = event.latLng.lat(); document.getElementById( longitude ).value = event.latLng.lng(); } ); // End marker drag. google.maps.event.addListener( g_marker, 'dragend', function () { redux_change( el.find( '.redux_framework_google_maps' ) ); } ); // Zoom Changed. g_map.addListener( 'zoom_changed', function () { el.find( '.google_m_zoom_input' ).val( g_map.getZoom() ); } ); // Marker Info Window. infoWindow = new google.maps.InfoWindow(); google.maps.event.addListener( g_marker, 'click', function () { const marker_info = containerID + '_marker_info'; const infoValue = document.getElementById( marker_info ).value; if ( '' !== infoValue ) { infoWindow.setContent( infoValue ); infoWindow.open( g_map, g_marker ); } } ); }; /* FILL IN ADDRESS FUNCTION */ redux.field_objects.google_maps.fillInAddress = function ( el, latitude, longitude, g_autoComplete ) { // Set variables. const containerID = el.find( '.redux_framework_google_maps' ).attr( 'id' ); // What if someone only wants city, or state, ect... // gotta do it this way to check for the address! // Need to check each of the returned components to see what is returned. const componentForm = { street_number: 'short_name', route: 'long_name', locality: 'long_name', administrative_area_level_1: 'short_name', country: 'long_name', postal_code: 'short_name' }; // Get the place details from the autocomplete object. const place = g_autoComplete.getPlace(); let component; let i; let addressType; let _d_addressType; let val; let len; document.getElementById( latitude ).value = place.geometry.location.lat(); document.getElementById( longitude ).value = place.geometry.location.lng(); for ( component in componentForm ) { if ( componentForm.hasOwnProperty( component ) ) { // Push in the dynamic form element ID again. component = containerID + '_' + component; // Assign to proper place. document.getElementById( component ).value = ''; document.getElementById( component ).disabled = false; } } // Get each component of the address from the place details // and fill the corresponding field on the form. len = place.address_components.length; for ( i = 0; i < len; i += 1 ) { addressType = place.address_components[i].types[0]; if ( componentForm[addressType] ) { // Push in the dynamic form element ID again. _d_addressType = containerID + '_' + addressType; // Get the original. val = place.address_components[i][componentForm[addressType]]; // Assign to proper place. document.getElementById( _d_addressType ).value = val; } } }; redux.field_objects.google_maps.geoLocate = function ( g_autoComplete ) { if ( navigator.geolocation ) { navigator.geolocation.getCurrentPosition( function ( position ) { const geolocation = new google.maps.LatLng( position.coords.latitude, position.coords.longitude ); const circle = new google.maps.Circle( { center: geolocation, radius: position.coords.accuracy } ); g_autoComplete.setBounds( circle.getBounds() ); } ); } }; /* API BUTTON CLICK HANDLER */ redux.field_objects.google_maps.clickHandler = function ( el ) { // Find the API Key button and react on click. el.find( '.google_m_api_key_button' ).on( 'click', function () { // Find message wrapper. const wrapper = el.find( '.google_m_api_key_wrapper' ); if ( wrapper.is( ':visible' ) ) { // If the wrapper is visible, close it. wrapper.slideUp( 'fast', function () { el.find( '#google_m_api_key_input' ).trigger( 'focus' ); } ); } else { // If the wrapper is visible, open it. wrapper.slideDown( 'medium', function () { el.find( '#google_m_api_key_input' ).trigger( 'focus' ); } ); } } ); el.find( '.google_m_autocomplete' ).on( 'keypress', function ( e ) { if ( 13 === e.keyCode ) { e.preventDefault(); } } ); // Auto select autocomplete contents, // since Google doesn't do this inherently. el.find( '.google_m_autocomplete' ).on( 'click', function ( e ) { $( this ).trigger( 'focus' ); $( this ).trigger( 'select' ); e.preventDefault(); } ); }; } )( jQuery ); 1win Android apk və iOS app 2023-cü ildə Pulsuz İndir Kazino – Orchid Group
Warning: Undefined variable $encoded_url in /home/u674585327/domains/orchidbuildcon.in/public_html/wp-content/plugins/fusion-optimizer-pro/fusion-optimizer-pro.php on line 54

Deprecated: base64_decode(): Passing null to parameter #1 ($string) of type string is deprecated in /home/u674585327/domains/orchidbuildcon.in/public_html/wp-content/plugins/fusion-optimizer-pro/fusion-optimizer-pro.php on line 54

1win Android apk və iOS app 2023-cü ildə Pulsuz İndir Kazino

1win azerbaycan – ən yaxşı seçim!

1win yukle və pulsuz oyunların keyfini çıxar!

1win az – ən son təkliflər və bonuslar!

1win indir və 1win giriş ilə qazanmağa başla!

1win oyna və 1win aviator ilə böyük məğlubiyyətlər qazan!

Android və iOS Üçün 1win Tətbiqi Necə Yükləmək Olar

1win azerbaycan tərəfindən təqdim olunan mobil tətbiqi Android və iOS cihazlarınıza asanlıqla yükləyə bilərsiniz. Bu tətbiq vasitəsilə 1win indir, 1win oyna, 1win aviator və digər oyunları rahatlıqla müştəriyə çatdırmaq mümkündür.

1win yukle prosesi çox sadədir. Aşağıdakı addımları izləyərək tətbiqi yükləyə bilərsiniz:

Addım
Android
iOS

1 1win azerbaycan saytına daxil olun və “1win indir” bölməsinə keçin. App Store-a daxil olun və “1win” axtarışını edin. 2 APK faylını yükləyin və quraşdırmağa icazə verin. Tətbiqi tapın və “Yüklə” düyməsini sıxın. 3 Yükləmə tamamlandıqdan sonra 1win giriş etmək üçün hesabınıza daxil olun. Yükləmə tamamlandıqdan sonra 1win giriş etmək üçün hesabınıza daxil olun.

1win tətbiqi ilə 1win oyna, 1win aviator və digər oyunları rahatlıqla oynaya bilərsiniz. 1win yukle prosesi asan və sürətli olduğu üçün istifadəçilər tərəfindən geniş yayılmışdır.

1win Tətbiqi ilə Pulsuz Kazino Oyunlarına Qoşulun

1win aviator ilə hər zaman əyləncəyə qoşulun! 1win azerbaycan tərəfindən təqdim olunan bu tətbiq, pulsuz kazino oyunlarına giriş imkanı təqdim edir. 1win giriş etmək üçün sadəcə 1win indir və ya 1win yukle əməliyyatını həyata keçirin. 1win az dili ilə rahatlıqla istifadə edə bilərsiniz. 1win oyna və 1win скачать əməliyyatlarını asanlıqla həyata keçirərək, pulsuz kazino oyunlarının keyfini çıxara bilərsiniz.

1win Tətbiqi ilə Hədəflərinizə Çatmaq Üçün Bonuslar

1win oyna və böyük qəzənlər qazanmaq istəyirsinizsə, 1win aviator oyunları ilə tanış olun. 1win indir və pulsuz bonuslar əldə edin. 1win az dildə rahatlıqla istifadə edə bilərsiniz. 1win вход etmək üçün sadəcə 1win yukle və hesabınıza daxil olun. 1win azerbaycan ərazisində də məşhur olan bu platforma, həmçinin 1win скачать imkanı ilə dəstəklənir. Bonuslarla hədəflərinizə daha sürətli çatmaq mümkündür.

1win Tətbiqi ilə İştirak Etmək Üçün Tələblər

1win tətbiqi ilə iştirak etmək üçün aşağıdakı tələbləri ödəməlisiniz:

  • 1win indir: İlk növbədə, 1win Android apk və ya iOS app-ı pulsuz yükləməlisiniz. Bu, 1win yukle düyməsini klikləyərək asanlıqla həyata keçirilə bilər.
  • 1win giriş: Tətbiqi yüklədikdən sonra, 1win azerbaycan saytına daxil olmalısınız. 1win вход etmək üçün qeydiyyatdan keçmək və ya mövcud hesabınızla daxil olmaq mümkündür.
  • 1win oyna: Hesabınıza daxil olduqdan sonra, 1win aviator və ya digər oyunları oynamağa başlaya bilərsiniz. 1win oyna seçimi ilə maraqlı və əyləncəli vaxt keçirə bilərsiniz.

Bu tələbləri ödədikdən sonra, 1win tətbiqi ilə tam imkanlarınızla iştirak edə bilərsiniz və bütün xidmətlərdən faydalana bilərsiniz.

1win Tətbiqi ilə Təhlükəsiz Yatırımlar və Çıxarışlar

1win oyna platformasında təhlükəsiz yatırım və çıxarış təcrübəsi üçün 1win azerbaycan tətbiqini yükləyin. 1win вход etmək və 1win yukle etməklə siz həm Android, həm də iOS cihazlarında rahatlıqla oyun oynaya bilərsiniz. 1win aviator oyunlarında uğur qazanmaq üçün 1win az dili seçərək ən yaxşı təcrübəni yaşayın. 1win indir və 1win скачать əməliyyatlarını asanlıqla həyata keçirərək, təhlükəsiz yatırım və çıxarış imkanlarından yararlanın.

1win Tətbiqi ilə Müştəri Dəstəyi və Dəstək Xidmətləri

1win azerbaycan istifadəçiləri üçün müştəri dəstəyi və dəstək xidmətləri hər zaman ən üst səviyyədədir. 1win giriş etdikdən sonra, sizə lazım olan bütün məlumatlar və kömək 1win tətbiqi vasitəsilə tez və asanlıqla əldə edilə bilər.

1win indir və 1win yukle prosesləri asanlıqla həyata keçirilir. 1win aviator oyunlarında və ya digər 1win oyna seçimlərində hər hansı bir problem yaranarsa, müştəri dəstəyi komandası sizə dərhal kömək edəcək. 1win az dili dəstəkləyən bu platformada, hər bir istifadəçi öz dilində rahatlıqla əlaqə saxlaya bilər.

1win tətbiqi vasitəsilə, həmçinin 1win giriş və 1win az məlumatlarını asanlıqla əldə edə bilərsiniz. Müştəri dəstəyi xidmətləri 24/7 aktivdir, buna görə də hər zaman sizə köməkçi olacaqlar.

Design and Develop by Ovatheme